package cn.tedu.innerclass;
/*本类用于测试匿名内部类
 * 匿名内部类(接口的匿名内部类?!)没有名字,通常与匿名对象(接口的匿名对象)结合在一起使用*/
public class TestInner5 {
    public static void main(String[] args) {
        //3.创建了接口1对应的匿名对象,(内部类)实现了接口中的方法,调用了实现的方法
       /*new Inter1() {
            @Override
            public void save() {
                System.out.println("实现保存方法~");
            }
            @Override
            public void get() {

            }
        }.save();*/

       /*Inter1 inter1 = *//*new Inter1() {
           @Override
           public void save() {

           }

           @Override
           public void get() {

           }
       }.save();*/

        /*Inter1 in = new Inter1() {
            @Override
            public void save() {
                System.out.println("实现保存方法~");
            }

            @Override
            public void get() {

            }
        }.save();*/ //然后调用自己实现的某一个方法,


        /*new Inter1() { //TBC: 接口没有实名对象,但是可以可以创建匿名对象,同时使用接口匿名内部类,实现接口里面的抽象方法
            @Override
            public void save() {
                System.out.println("实现保存方法~");
            }
            @Override
            public void get() {}
        }.save();*/

        /*new Inter2() { //TBC:抽象类没有实名对象,但是可以可以创建匿名对象,同时实现抽象类里面的抽象方法
            @Override
            public void drink() {
                System.out.println("一人饮酒醉");
            }
        }.drink();*/



        new Inter2() {  //Inter1()和Inter2()也可以看做是实现类的对象(或者接口匿名对象,抽象类匿名对象)
            @Override
            public void drink() {
                System.out.println("一人饮酒醉");
            }
            //抽象类里面普通方法可以实现或者不用实现,
            /*@Override
            public void play(){
                System.out.println("再次玩代码~");
            }*/

        }.play();


        /*new Inter2() {
            @Override
            public void drink() {
                System.out.println("一人饮酒醉");
            }

            @Override
            public void play(){
                System.out.println("再次玩代码~");  //抽象类的普通方法也可以在匿名内部类里面重写
            }

        }.drink();*/

        /*new Inter3().study();
        new Inter3().powerUp();*/
    }
}
//1.创建接口
interface Inter1{
    //2.定义接口中的抽象方法
    public abstract void save();
    void get();
}
//4.创建抽象类
abstract class Inter2{
    public void play(){
        System.out.println("玩代码");
    }
     public abstract void drink();
}
//6.创建普通类
class Inter3{
    public void study(){
        System.out.println("什么都无法阻挡我学习赚钱的决心");
    }
    public void powerUp(){
        System.out.println("我们会越来越强的!");
    }
}